package com.itlaobing.entity;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * @Classname Customer
 *     所有的注解都是使用JPA的规范提供的注解，
 *     所以在导入注解包的时候，一定要导入javax.persistence下的
 * @Date 2020/4/9 10:10
 * @Author by Administrator
 * @Version v1.0
 */
//@Data
@Entity //声明实体类
@Table(name="cust_customer") //建立实体类和表的映射关系
public class Customer implements Serializable {

//    @Id  //声明当前私有属性为主键
//    @GeneratedValue(strategy= GenerationType.IDENTITY) //配置主键的生成策略
//    @Column(name="cust_id") //指定和表中cust_id字段的映射关系
//    private Long custId;

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator="payablemoney_gen")
    @TableGenerator(name = "payablemoney_gen",
            table="tb_generator",
            pkColumnName="gen_name",
            valueColumnName="gen_value",
            pkColumnValue="CUSTOMER_PK",
            allocationSize=1
    )
    private Long custId;



    @Column(name="cust_name") //指定和表中cust_name字段的映射关系
    private String custName;

    @Column(name="cust_source")//指定和表中cust_source字段的映射关系
    private String custSource;

    @Column(name="cust_industry")//指定和表中cust_industry字段的映射关系
    private String custIndustry;

    @Column(name="cust_level")//指定和表中cust_level字段的映射关系
    private String custLevel;

    @Column(name="cust_address")//指定和表中cust_address字段的映射关系
    private String custAddress;

    @Column(name="cust_phone")//指定和表中cust_phone字段的映射关系
    private String custPhone;


    /**
     * 配置 一对多 关系
     * 使用注解配置多表关系
     *   1. 声明关系
     *      @oneToMany: 配置一对多关系
     *        targetEntity； 对方对象的字节码
     *   2. 配置外键（中间表）
     *      @JoinColumn: 配置外键
     *         name： 外键字段名称
     *         referencedColumnName： 参照的主表的主键名称
     *   在客户实体（一的一方）上面配置了外键，所以客户也具备了维护外键的作用
     */
//    @OneToMany(targetEntity = Contacts.class)
//    @JoinColumn(name = "cust_id", referencedColumnName = "custId")
    /**
     * 放弃外键维护权，只需要声明关系即可
     *      mappedBy：对方配置关系的属性名称(即Contacts类中的 customer)
     * 级联操作
     *      cascade
     * fetch：
     *      FetchType.LAZY   延迟加载
     *      FetchType.EAGER  立即加载
     */
    @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<Contacts> contactsSet = new HashSet<Contacts>();

    public Long getCustId() {
        return custId;
    }

    public void setCustId(Long custId) {
        this.custId = custId;
    }

    public String getCustName() {
        return custName;
    }

    public void setCustName(String custName) {
        this.custName = custName;
    }

    public String getCustSource() {
        return custSource;
    }

    public void setCustSource(String custSource) {
        this.custSource = custSource;
    }

    public String getCustIndustry() {
        return custIndustry;
    }

    public void setCustIndustry(String custIndustry) {
        this.custIndustry = custIndustry;
    }

    public String getCustLevel() {
        return custLevel;
    }

    public void setCustLevel(String custLevel) {
        this.custLevel = custLevel;
    }

    public String getCustAddress() {
        return custAddress;
    }

    public void setCustAddress(String custAddress) {
        this.custAddress = custAddress;
    }

    public String getCustPhone() {
        return custPhone;
    }

    public void setCustPhone(String custPhone) {
        this.custPhone = custPhone;
    }

    public Set<Contacts> getContactsSet() {
        return contactsSet;
    }

    public void setContactsSet(Set<Contacts> contactsSet) {
        this.contactsSet = contactsSet;
    }
}
